WebSocket হলো একটি প্রোটোকল যা দুইটি সিস্টেম (যেমন ক্লায়েন্ট এবং সার্ভার) এর মধ্যে স্থায়ী, ডুয়াল-ডিরেকশনাল এবং কমিউনিকেশন লিঙ্ক তৈরি করতে ব্যবহৃত হয়। এটি HTTP প্রোটোকল থেকে আলাদা, যেখানে একবার একটি কানেকশন তৈরি হলে, ক্লায়েন্ট এবং সার্ভার উভয়ই একে অপরকে বার্তা পাঠাতে পারে, এবং এটি একটি ওপেন কানেকশন ব্যবহারের মাধ্যমে কমিউনিকেশন করতে সক্ষম।
WebSocket-এর বৈশিষ্ট্য:
Spring Boot ব্যবহার করে WebSocket এর সুবিধা নেওয়া যায় অনেক সহজে। Spring WebSocket API দিয়ে আমরা একটি ওয়েবসাইটে রিয়েলটাইম যোগাযোগ সিস্টেম তৈরি করতে পারি, যেমন চ্যাট অ্যাপ্লিকেশন বা লাইভ নোটিফিকেশন সিস্টেম।
Spring Boot-এ WebSocket ব্যবহারের জন্য সাধারণত দুটি প্রধান ধাপ রয়েছে:
প্রথমে Spring Boot অ্যাপ্লিকেশনটির pom.xml
-এ প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
implementation 'org.springframework.boot:spring-boot-starter-websocket'
Spring Boot অ্যাপ্লিকেশন কনফিগার করার জন্য একটি কনফিগারেশন ক্লাস তৈরি করতে হবে, যেখানে WebSocket এন্ডপয়েন্ট সেট করা হবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS(); // WebSocket endpoint
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic"); // Enable message broker for /topic endpoint
registry.setApplicationDestinationPrefixes("/app"); // Prefix for app messages
}
}
ব্যাখ্যা:
@EnableWebSocket
: Spring WebSocket সাপোর্ট সক্ষম করে।registerStompEndpoints
: WebSocket এন্ডপয়েন্ট /ws
দিয়ে স্টার্ট হবে, যেখানে withSockJS()
ব্যবহার করা হয়েছে ফলব্যাক সাপোর্টের জন্য।configureMessageBroker
: /topic
নামে একটি সিম্পল মেসেজ ব্রোকার সেট করা হয়েছে এবং /app
নামের অ্যাপ্লিকেশন ডেস্টিনেশন পাথটি নির্ধারণ করা হয়েছে।Spring WebSocket Controller ব্যবহার করে মেসেজ প্রেরণ এবং গ্রহণ করা হয়। এই কন্ট্রোলারটি সার্ভারের মাধ্যমে ক্লায়েন্টের সাথে রিয়েলটাইম কমিউনিকেশন নিশ্চিত করবে।
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
@Controller
public class WebSocketController {
private final SimpMessagingTemplate messagingTemplate;
public WebSocketController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
// Listen for messages sent to /app/chat
@MessageMapping("/chat")
public void sendMessage(String message) {
messagingTemplate.convertAndSend("/topic/messages", message); // Send message to /topic/messages
}
}
ব্যাখ্যা:
@MessageMapping("/chat")
: /app/chat
এ পাঠানো বার্তাগুলি গ্রহণ করবে।SimpMessagingTemplate
: মেসেজগুলোকে /topic/messages
পাথের মাধ্যমে ক্লায়েন্টদের পাঠাবে।ক্লায়েন্ট সাইডে, WebSocket কানেকশন এবং মেসেজ পাঠানোর জন্য JavaScript ব্যবহার করতে হবে।
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.1/sockjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
</head>
<body>
<h1>WebSocket Chat</h1>
<div id="chat"></div>
<input type="text" id="message" placeholder="Type a message" />
<button onclick="sendMessage()">Send</button>
<script>
const socket = new SockJS('/ws');
const stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/messages', function(response) {
document.getElementById("chat").innerHTML += "<p>" + response.body + "</p>";
});
});
function sendMessage() {
const message = document.getElementById("message").value;
stompClient.send("/app/chat", {}, message);
document.getElementById("message").value = '';
}
</script>
</body>
</html>
ব্যাখ্যা:
SockJS
এবং STOMP.js
: ক্লায়েন্ট সাইডে WebSocket কানেকশন স্থাপন এবং মেসেজ পাঠানোর জন্য ব্যবহৃত হয়।stompClient.subscribe("/topic/messages", ...)
: ক্লায়েন্টটি /topic/messages
থেকে মেসেজ গ্রহণ করে এবং পৃষ্ঠাতে দেখায়।stompClient.send("/app/chat", ...)
: ক্লায়েন্ট মেসেজ পাঠানোর জন্য /app/chat
এন্ডপয়েন্টে একটি মেসেজ পাঠায়।এখন Spring Boot অ্যাপ্লিকেশনটি রান করলে /ws
WebSocket এন্ডপয়েন্টটি সক্রিয় হবে। ক্লায়েন্ট ব্রাউজারে HTML ফাইলটি খুললে, আপনি real-time chat করতে পারবেন।
WebSocket একটি শক্তিশালী প্রযুক্তি, যা রিয়েল-টাইম ডেটা ট্রান্সফারের জন্য আদর্শ। Spring Boot WebSocket ইন্টিগ্রেশন খুবই সহজ এবং প্রভাবশালী, এবং এটি দ্রুত রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট অ্যাপ, নোটিফিকেশন সিস্টেম, বা লাইভ ডেটা ফিড তৈরি করতে সাহায্য করে। Spring Boot-এ WebSocket সেটআপ করা সহজ এবং এটি মেসেজ ব্রোকার এবং STOMP প্রোটোকল ব্যবহার করে কার্যকরভাবে রিয়েল-টাইম কমিউনিকেশন সমর্থন করে।
Read more